/* 
* Práctica 2 asignatura Desarrollo Aplicaciones Móviles
*
* /////////////////////////////////////////////////////////////////////////////////////
*
*    -Informática- 
*
* Integrantes:
*
*    Esperanza González de la Mora & Félix López Garcinuño & José Miguel Bilbao Navas 
*/

package com.miaeropuerto.damefj.op;

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import com.miaeropuerto.damefj.R;
import com.miaeropuerto.damefj.bd.Conexion;
import com.miaeropuerto.damefj.bd.Creacion;
import com.miaeropuerto.damefj.bd.Sentencias;
import com.miaeropuerto.damefj.dp.Depuracion;
import com.miaeropuerto.damefj.ms.Mensajes;

public class Annadir extends Activity{
	
	    private Depuracion depannadir=new Depuracion();
	    private Mensajes menannadir=new Mensajes();
		private Conexion conexbdannadir=new Conexion();
		private SQLiteDatabase dataannadir;
		private Sentencias sentbdannadir=new Sentencias();
	    private String mensaje_error;
	    private boolean flagannadirini=false;
	    
	    //Para manejar Date Picker
	    private static final int DATE_DIALOG_ID = 0; 
	    private int mesDP = 0;
		private int diaDP = 0;
		private int annoDP = 0;
		
		//Para manejar la fecha del sistema
		private int mesSYS = 0;
		private int diaSYS = 0;
		private int annoSYS = 0;
		
		//Para manejar los objetos XML
		private EditText ecod;
		private EditText epai;
		private EditText enot;
		private TextView tmosfec;
		
		@Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        depannadir.mostrar_log("Annadir.java", "Actividad creada");
	        Window annadirwin = getWindow();
	        annadirwin.requestFeature(Window.FEATURE_RIGHT_ICON); //Decimos que lo requiere antes de visualizarse
	        setContentView(R.layout.miaero_annadir);//Mostramos xml
	        setTitle(R.string.titulo_annadir); //Establecemos título [this.setTitle]
	        annadirwin.setFeatureDrawableResource(Window.FEATURE_RIGHT_ICON, R.drawable.icon); //Establecemos el icono a mostrar
	        
	        //Cogemos referencia de los objetos situados en el XML para tratar con ellos
	        ecod=(EditText) findViewById(R.id.editTextCod); 
	        epai=(EditText) findViewById(R.id.editTextPai); 
	        enot=(EditText) findViewById(R.id.editTextMultiNot);
	        tmosfec=(TextView) findViewById(R.id.textViewFecMos);
	        Button bfec=(Button) findViewById(R.id.buttonFec);
	        Button bann=(Button) findViewById(R.id.buttonAnn);
	        
	        /**************EVENTOS DE LOS BOTONES (SOLO SE PUEDEN HACER AQUI)**************/
	        
	        bfec.setOnClickListener(new View.OnClickListener() {
				public void onClick(View v) {
					showDialog(DATE_DIALOG_ID);
				}
			});
	        
	        bann.setOnClickListener(new View.OnClickListener() {
				public void onClick(View v) {
					if (validar())
					{
						dataannadir=conexbdannadir.AbrirBDEscritura(Annadir.this);
						sentbdannadir.insertarDatos(Creacion.TABLA,dataannadir, ecod.getText().toString().toUpperCase(), epai.getText().toString().trim(), 
								diaDP,mesDP,annoDP,enot.getText().toString());
						conexbdannadir.CerrarBD();
						menannadir.toastTextoIcono(Annadir.this.getApplicationContext(),R.string.insertado,R.drawable.ok);
						setResult(RESULT_OK);
						finish();
					}
					else menannadir.mostrarDialog(Annadir.this, R.string.error_annadir, 0, Annadir.this.getMensaje_error(), Mensajes.DIALOGO_ERROR);
				}	
			});
	        
	        /****************************************************************************/
	        
	        /**************VALIDACIONES TEXTVIEW (SOLO SE PUEDEN HACER AQUI)*************/
	        
	        ecod.setOnKeyListener(new View.OnKeyListener() {//controlamos introducir de A a Z (sin la Ñ) unicamente en campo COD_AERO
	        	public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN) {//cuando se pulsa tecla
                    	//con las mayusculas devuelve dos valores pero no afecta                          //suprimir                      //volver atras
                         if (((keyCode<KeyEvent.KEYCODE_A) || (keyCode>KeyEvent.KEYCODE_Z)) && (keyCode!=KeyEvent.KEYCODE_DEL)&& (keyCode!=KeyEvent.FLAG_KEEP_TOUCH_MODE)
                        		 && (keyCode!=KeyEvent.KEYCODE_DPAD_LEFT) && (keyCode!=KeyEvent.KEYCODE_DPAD_RIGHT)) //flechas izquierda y derecha
                          	 return true; 
                    }      
                  return false; //se inserta en EditText
				}
			});
	        
	        epai.setOnKeyListener(new View.OnKeyListener() {//controlamos introducir de A a Z (sin la Ñ) unicamente en campo PAIS
	        	public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN) {//cuando se pulsa tecla
                    	//con las mayusculas devuelve dos valores pero no afecta                          //suprimir                      //volver atras                  
                         if (((keyCode<KeyEvent.KEYCODE_A) || (keyCode>KeyEvent.KEYCODE_Z)) && (keyCode!=KeyEvent.KEYCODE_DEL)&& (keyCode!=KeyEvent.FLAG_KEEP_TOUCH_MODE)
                        		 && (keyCode!=KeyEvent.KEYCODE_DPAD_LEFT) && (keyCode!=KeyEvent.KEYCODE_DPAD_RIGHT) && (keyCode!=KeyEvent.KEYCODE_DPAD_UP) && (keyCode!=KeyEvent.KEYCODE_DPAD_DOWN)
                        		 && (keyCode!=KeyEvent.KEYCODE_SEMICOLON) && (keyCode!=KeyEvent.KEYCODE_SPACE))//flechas, la Ñ (caracter ; mostraria) y espacio   
                         	 return true;                                
                         if (keyCode==KeyEvent.KEYCODE_SEMICOLON){//La Ñ no se añade
                            menannadir.toastTexto(Annadir.this.getApplicationContext(), R.string.noene);           	
                          	return true;
                          }
                    }
                  return false; //se inserta en EditText
				}
			});
	        
	        enot.setOnKeyListener(new View.OnKeyListener() {//si introducimos una Ñ en el campo NOTAS
	        	public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN) {//cuando se pulsa tecla
                    	 if (keyCode==KeyEvent.KEYCODE_SEMICOLON){
                    		menannadir.toastTexto(Annadir.this.getApplicationContext(), R.string.noene);
                          	return true;
                          }
                    }
                  return false; //se inserta en EditText
				}
			});
	        
	        /****************************************************************************/
	        
	        inicializarDatePicker();
	        
		}//Se sigue en onResume ya que no hay OnStart implementado
	    
	    @Override
	    public void onResume()
		{
			super.onResume();
			if (!flagannadirini) {
				  depannadir.mostrar_log("Annadir.java", "Actividad iniciada"); 
				  flagannadirini=true;
			}
			else depannadir.mostrar_log("Annadir.java", "Actividad recupera foco");
		}
	    
	    @Override
	    public void onRestoreInstanceState(Bundle estadoActivityR) {
	        super.onRestoreInstanceState(estadoActivityR);
	        depannadir.mostrar_log("Annadir.java", "Recuperamos estado de la actividad (punteros..");
	    }//Suele hacer el propio de Android

	    @Override
	    public void onSaveInstanceState(Bundle estadoActivityS) {
	        super.onSaveInstanceState(estadoActivityS);
	        depannadir.mostrar_log("Annadir.java", "Guardamos estado de la actividad (punteros...)");
	    }

	    @Override
	    public void onPause()
		{
			super.onPause();
			depannadir.mostrar_log("Annadir.java", "Actividad pierde foco");
		}
	    
		@Override
		public void onDestroy()
		{ //Dar a la fecha para salir 
			super.onDestroy();
			depannadir.mostrar_log("Annadir.java", "Actividad finalizada");
		}
		
		
        /*****************CORRESPONDIENTE A DATE PICKER*****************/		
        
		private void inicializarDatePicker()
		{
           final Calendar c = Calendar.getInstance();
           annoDP = c.get(Calendar.YEAR);
           mesDP = c.get(Calendar.MONTH)+1;//el mes va de 0 a 11
           diaDP = c.get(Calendar.DAY_OF_MONTH);
           annoSYS=annoDP;mesSYS=mesDP;diaSYS=diaDP;//Fijamos la fecha del sistema
        }
		
		//actualizamos TextView mostrar fecha seleccionada
		private void updateDatePicker() {
	    	tmosfec.setText(diaDP+"/"+mesDP+"/"+annoDP);
	    }
	    
		//seleccionamos fecha
	    private DatePickerDialog.OnDateSetListener dateSet =
	            new DatePickerDialog.OnDateSetListener() {
	                public void onDateSet(DatePicker v, int y,int m, int d) {
	                    annoDP = y;
	                    mesDP = m+1; //mes del año
	                    diaDP = d; //dia del mes
	                    updateDatePicker();
	                }
	    };
	            
		@Override
		protected Dialog onCreateDialog(int id) {
		    if (id==DATE_DIALOG_ID) return new DatePickerDialog(this,dateSet,annoDP, mesDP-1, diaDP); //Se resta uno porque muestra siguiente mes
		  return null;
		}

        /************************************************************/

		private boolean validar()
		{
			depannadir.mostrar_log("Annadir.java","Entramos a validar");
			Annadir.this.setMensaje_error("");
			boolean existenD=false;
			String ecodTexto=ecod.getText().toString();
			
			//1-Comprobacion datos vacios
    			if (ecod==null || ecodTexto.equals("")) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● CÓDIGO vacío\n");
		    	if (epai==null || epai.getText().toString().trim().equals("")) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● PAÍS vacío\n");
			    if (tmosfec==null || tmosfec.getText().toString().equals("")) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● FECHA no seleccionada\n");
			   
			//2-Longitud del codigo aeropuerto sea 3 
			    if ((ecodTexto.length()) < 3) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● CÓDIGO longitud inválida\n");
			
			//3-Fecha introducida no sea anterior a la actual
			    if(annoDP==annoSYS)
			    {
				    if (mesDP==mesSYS)
				    {   
				      if (diaDP<diaSYS)    Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● FECHA anterior actual\n");
				    }
				    else if (mesDP<mesSYS) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● FECHA anterior actual\n");
			    }
				else if (annoDP<annoSYS)   Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● FECHA anterior actual\n");  
			 
			//4-Datos (salvo pais y notas) no esten insertados
			    dataannadir=conexbdannadir.AbrirBDLectura(Annadir.this);
				existenD=sentbdannadir.existenDatosInsertados(dataannadir, ecodTexto.toUpperCase(),diaDP,mesDP,annoDP);
				conexbdannadir.CerrarBD();
				if (existenD) Annadir.this.setMensaje_error(Annadir.this.getMensaje_error()+"\n\t ● DATOS INSERTADOS\n\n\t\t Código IATA y fecha\n");
				    
		     	if (Annadir.this.getMensaje_error().equals(""))	return true; //Datos válidos
            return false; 
		}		
		
		public String getMensaje_error() {
	   	    return mensaje_error;
	    }

	    public void setMensaje_error(String mensaje_error) {
			this.mensaje_error = mensaje_error;
	    }
}